/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.compra.managed;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.clases.cVarios;
import sv.com.intesal.compra.bean.Compra;
import sv.com.intesal.compra.bean.OrdenCompra;
import sv.com.intesal.compra.bean.Proveedor;
import sv.com.intesal.compra.controlador.CompraControlador;
import sv.com.intesal.compra.controlador.OrdenCompraControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author Jerez
 */
@ManagedBean(name = "compraManaged")
@ViewScoped
public class CompraManaged implements Serializable {

    private Boolean flagStep_1;
    private Boolean flagStep_2;
    private Boolean flagStep_3;
    private Mensaje m;
    private SessionManaged sm;
    private cVarios v;
    //private List<String> cmbTipo;
    private List<String> cmbFormaPago;
    private List<String> cmbTipo;

    /*ORDEN DE COMPRA*/
    private OrdenCompra selectedEncaOrdenCompra;
    private OrdenCompra selectedDetaOrdenCompra;
    private OrdenCompra selectedDetaOrdenCompraTotales;
    private List<OrdenCompra> encaOrdenCompras;
    private List<OrdenCompra> detaOrdenCompras;
    /*COMPRA*/
    private Compra selectedCompra;
    private Proveedor selectedProveedor;

    public CompraManaged() {
        selectedProveedor = new Proveedor();

        m = new Mensaje();
        v = new cVarios();
        sm = new SessionManaged();

        this.selectedEncaOrdenCompra = new OrdenCompra();
        this.selectedDetaOrdenCompra = new OrdenCompra();
        this.selectedDetaOrdenCompraTotales = new OrdenCompra();

        this.selectedCompra = new Compra();
        this.flagStep_1 = true;
        this.flagStep_2 = false;
        this.flagStep_3 = false;
        this.llenarPagina();
    }

    private void llenarPagina() {
        try {
            if (cmbFormaPago == null) {
                cVarios v = new cVarios();
                this.cmbFormaPago = v.FormaPago();
            }
            if (cmbTipo == null) {
                cVarios v = new cVarios();
                cmbTipo = v.TipoPago();
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void buscarGrid() {

        try {
            if (sm.validar_rol_usuario("wfrmCompra", sm.buscar) == true) {
                this.selectedEncaOrdenCompra.setId_p(this.selectedProveedor.getCodigo_p());
                this.selectedEncaOrdenCompra.setEstado_oc("AP"); //estado de aprobado de orden de compra
                this.selectedEncaOrdenCompra.setFiltrar_estado(false);

                OrdenCompraControlador oc = new OrdenCompraControlador();
                this.encaOrdenCompras = oc.getConsulta_EncaOrdenCompra(this.selectedEncaOrdenCompra);
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void ocultarFlag_Step1() {
        try {
            if (this.selectedDetaOrdenCompra == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (this.selectedDetaOrdenCompra != null) {
                this.flagStep_1 = false;
                this.flagStep_2 = true;

                OrdenCompraControlador oc = new OrdenCompraControlador();
                this.detaOrdenCompras = oc.getDeta_OrdenCompra(this.selectedDetaOrdenCompra.getId_oc());
                this.selectedDetaOrdenCompraTotales = oc.getTotales_x_OrdenCompra(this.selectedDetaOrdenCompra.getId_oc());
                this.ocultarFlag_Step2();
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void ocultarFlag_Step2() {
        try {
            this.flagStep_1 = false;
            this.flagStep_2 = true;
            this.flagStep_3 = false;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void ocultarFlag_Step3() {
        try {
            this.flagStep_1 = false;
            this.flagStep_2 = false;
            this.flagStep_3 = true;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void ocultarFlags_Inicio() {
        try {
            this.flagStep_1 = true;
            this.flagStep_2 = false;
            this.flagStep_3 = false;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void completeTransaction() {

        try {
            if (this.validar() == true) {
                if (sm.validar_rol_usuario("wfrmCompra", sm.agregar) == true) {

                    this.selectedCompra.setTotal_percepcion_c(this.selectedDetaOrdenCompraTotales.getTotal_percepcion_oc());
                    this.selectedCompra.setId_oc(this.selectedDetaOrdenCompra.getId_oc());
                    this.selectedCompra.setOrdenCompra(this.selectedDetaOrdenCompra);

                    CompraControlador cc = new CompraControlador();
                    this.getListaCompra();
                    cc.setEnca(this.selectedCompra, this.getListaCompra());

                    OrdenCompraControlador oc = new OrdenCompraControlador();
                    oc.cambiarEstado("F", this.selectedDetaOrdenCompra.getId_oc());
                    //cc.procesarCompra(this.selectedOrden, detaOrden, encaCompra);//andy's method

                    LimpiarManaged.limpiar();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private List<Compra> getListaCompra() throws Exception {
        try {
            List<Compra> lista = new ArrayList<Compra>();

            for (int i = 0; i < this.detaOrdenCompras.size(); i++) {
                Compra cc = new Compra();
                cc.setId_d(0); //para ingresar datos nuevos
                cc.setId_dm(this.detaOrdenCompras.get(i).getId_dm());
                cc.setCantidad_d(this.detaOrdenCompras.get(i).getCantidad_d());
                cc.setCosto_cd_d(this.detaOrdenCompras.get(i).getCosto_cd_d());
                cc.setCosto_d(this.detaOrdenCompras.get(i).getCosto_cd_d());
                cc.setIva_d(this.detaOrdenCompras.get(i).getIva_d());
                cc.setDescuento_d(this.detaOrdenCompras.get(i).getDescuento_d());
                cc.setPorcentaje_descuento_d(this.detaOrdenCompras.get(i).getPorcentaje_descuento_d());
                cc.setExento_d(this.detaOrdenCompras.get(i).getExento_d());
                lista.add(cc);
            }
            return lista;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    private boolean validar() throws Exception {
        try {
            Boolean var_return = true;

            if (this.selectedEncaOrdenCompra.getTipo_oc().equals("--")) {
                m.messageAdvertencia("Seleccionar un Tipo Válido");
                var_return = false;
            }

            if (this.encaOrdenCompras == null) {
                m.messageAdvertencia("No hay materiales para realizar la Orden de Compra");
                var_return = false;
            } else if (this.encaOrdenCompras.size() <= 0) {
                m.messageAdvertencia("No hay materiales para realizar la Orden de Compra");
                var_return = false;
            }

            if (this.selectedDetaOrdenCompra.getId_em() == null) {
                m.messageAdvertencia(m.campoError("EMPRESA"));
                var_return = false;
            }

            if (this.selectedCompra.getFecha_c() == null) {
                m.messageAdvertencia(m.campoError("FECHA COMPRA"));
                var_return = false;
            }

            if (this.selectedCompra.getFecha_documento_c() == null) {
                m.messageAdvertencia(m.campoError("FECHA DOCUMENTO"));
                var_return = false;
            }


            if (this.selectedCompra.getFactura_c() == null) {
                m.messageAdvertencia(m.campoError("FACTURA"));
                var_return = false;
            } else if (this.selectedCompra.getFactura_c().isEmpty() == true) {
                m.messageAdvertencia(m.campoError("NUMERO DE FACTURA"));
                var_return = false;
            }


            if (this.selectedCompra.getTipo_documento_c() == null) {
                m.messageAdvertencia(m.campoError("TIPO DOCUMENTO"));
                var_return = false;
            }

            if (this.detaOrdenCompras == null) {
                m.messageAdvertencia("NO HAY MATERIALES EN LA COMPRA");
                var_return = false;
            } else if (this.detaOrdenCompras.size() == 0) {
                m.messageAdvertencia("NO HAY MATERIALES EN LA COMPRA");
                var_return = false;
            }

            if (var_return == true) {
                for (int i = 0; i < this.detaOrdenCompras.size(); i++) {
                    if (detaOrdenCompras.get(i).getCosto_sd_d() <= 0.00 || detaOrdenCompras.get(i).getCantidad_d() == 0.00) {
                        m.messageAdvertencia("HAY DATOS QUE NO SON VALIDOS EN LOS MATERIALES");
                        var_return = false;
                        break;
                    }
                }
            }


            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void modificarOrdenCompra() {
        try {
            if (sm.validar_rol_usuario("wfrmCompra", sm.modificar) == true) {
                OrdenCompraControlador oc = new OrdenCompraControlador();
                oc.modificarOrdenCompra(this.selectedDetaOrdenCompra);
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    public void getProveedor_Quick(Proveedor pr) {
        try {
            this.selectedProveedor = pr;
        } catch (Exception e) {
            Mensaje m = new Mensaje();
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    /*
     * Setters & Getters
     */
    public Proveedor getSelectedProveedor() {
        if (selectedProveedor == null) {
            selectedProveedor = new Proveedor();
        }
        return selectedProveedor;
    }

    public void setSelectedProveedor(Proveedor selectedProveedor) {
        this.selectedProveedor = selectedProveedor;
    }

    public List<OrdenCompra> getDetaOrdenCompras() {
        return detaOrdenCompras;
    }

    public void setDetaOrdenCompras(List<OrdenCompra> detaOrdenCompras) {
        this.detaOrdenCompras = detaOrdenCompras;
    }

    public List<OrdenCompra> getEncaOrdenCompras() {
        return encaOrdenCompras;
    }

    public void setEncaOrdenCompras(List<OrdenCompra> encaOrdenCompras) {
        this.encaOrdenCompras = encaOrdenCompras;
    }

    public Boolean getFlagStep_3() {
        return flagStep_3;
    }

    public void setFlagStep_3(Boolean flagStep_3) {
        this.flagStep_3 = flagStep_3;
    }

    public OrdenCompra getselectedDetaOrdenCompra() {
        return selectedDetaOrdenCompra;
    }

    public void setselectedDetaOrdenCompra(OrdenCompra selectedDetaOrdenCompra) {
        this.selectedDetaOrdenCompra = selectedDetaOrdenCompra;
    }

    public OrdenCompra getselectedEncaOrdenCompra() {
        if (selectedEncaOrdenCompra == null) {
            selectedEncaOrdenCompra = new OrdenCompra();
        }
        return selectedEncaOrdenCompra;
    }

    public void setselectedEncaOrdenCompra(OrdenCompra selectedEncaOrdenCompra) {
        this.selectedEncaOrdenCompra = selectedEncaOrdenCompra;
    }

    public Boolean getFlagStep_1() {
        return flagStep_1;
    }

    public void setFlagStep_1(Boolean flagStep_1) {
        this.flagStep_1 = flagStep_1;
    }

    public Boolean getFlagStep_2() {
        return flagStep_2;
    }

    public void setFlagStep_2(Boolean flagStep_2) {
        this.flagStep_2 = flagStep_2;
    }

    public OrdenCompra getSelectedDetaOrdenCompra() {
        if (selectedDetaOrdenCompra == null) {
            selectedDetaOrdenCompra = new OrdenCompra();
        }
        return selectedDetaOrdenCompra;
    }

    public void setSelectedDetaOrdenCompra(OrdenCompra selectedDetaOrdenCompra) {
        this.selectedDetaOrdenCompra = selectedDetaOrdenCompra;
    }

    public OrdenCompra getSelectedDetaOrdenCompraTotales() {
        if (selectedDetaOrdenCompraTotales == null) {
            selectedDetaOrdenCompraTotales = new OrdenCompra();
        }
        return selectedDetaOrdenCompraTotales;
    }

    public void setSelectedDetaOrdenCompraTotales(OrdenCompra selectedDetaOrdenCompraTotales) {
        this.selectedDetaOrdenCompraTotales = selectedDetaOrdenCompraTotales;
    }

    public OrdenCompra getSelectedEncaOrdenCompra() {
        if (selectedEncaOrdenCompra == null) {
            selectedEncaOrdenCompra = new OrdenCompra();
        }
        return selectedEncaOrdenCompra;
    }

    public void setSelectedEncaOrdenCompra(OrdenCompra selectedEncaOrdenCompra) {
        this.selectedEncaOrdenCompra = selectedEncaOrdenCompra;
    }

    public Compra getSelectedCompra() {
        if (selectedCompra == null) {
            selectedCompra = new Compra();
        }
        return selectedCompra;
    }

    public void setSelectedCompra(Compra selectedCompra) {
        this.selectedCompra = selectedCompra;
    }

    public List<String> getCmbFormaPago() {
        return cmbFormaPago;
    }

    public void setCmbFormaPago(List<String> cmbFormaPago) {
        this.cmbFormaPago = cmbFormaPago;
    }

    public List<String> getCmbTipo() {
        return cmbTipo;
    }

    public void setCmbTipo(List<String> cmbTipo) {
        this.cmbTipo = cmbTipo;
    }
}